package com.itheima.canal.conf;

import org.springframework.amqp.core.*;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


/**
 * RabbitMq 交换机 队列 申明配置类
 */

@Configuration // 标记为 配置类 , 会随着微服务启动而读取该类定义的Bean并加入Spring容器
public class RabbitMqConfig {


    //定义广告更新队列名称
    public static final String AD_UPDATE_QUEQU="ad_update_quequ";  //用于 传输广告更新数据 所用队列,交换机为默认;

    //定义用于上架商品更新的队列名称以及交换机名称
    public static final String GOODS_UP_EXCHANGE = "goods_up_exchange"; //用于 传输商品上架信息 所用交换机名称
    public static final String SEARCH_ADD_QUEUE = "search_add_queue"; //用于 传输商品上架信息 所用队列名称

    //定义用于下架商品更新的队列名称以及交换机名称
    public static final String GOODS_DEL_EXCHANGE = "goods_del_exchange"; //用于 传输商品上架信息 所用交换机名称
    public static final String SEARCH_DEL_QUEUE = "search_del_queue"; //用于 传输商品上架信息 所用队列名称

    //定义 广告更新所使用的队列 , 交换机为默认的不用定义
    @Bean(AD_UPDATE_QUEQU)
    public Queue queue(){
        return new Queue(AD_UPDATE_QUEQU);
    }
    //-------------------------------------------------------------------

    //定义商品上架更新所使用的 队列和交换机
    @Bean(GOODS_UP_EXCHANGE)   //交换机
    public Exchange GOODS_UP_EXCHANGE(){
        /**
         *  fanoutExchange : 设置交换机为订阅(广播)类型 参数为 : 交换机名称
         *  durable : 设置该交换机的数据是否持久化 , 参数为 : boolean类型,true为是 , false为不是;
         *  build  : 创建
         */
        return ExchangeBuilder.fanoutExchange(GOODS_UP_EXCHANGE).durable(true).build();
    }
    @Bean(SEARCH_ADD_QUEUE) //队列
    public Queue SEARCH_ADD_QUEUE(){
        return new Queue(SEARCH_ADD_QUEUE); //创建队列并设置名字;
    }
    @Bean //设置交换机与队列的关联
    public Binding GOODS_UP_EXCHANGE_BINDING(@Qualifier(GOODS_UP_EXCHANGE) Exchange exchange,@Qualifier(SEARCH_ADD_QUEUE) Queue queue){
        return BindingBuilder.bind(queue).to(exchange).with("").noargs(); //将上架用的交换机与队列关联
    }

    //-------------------------------------------------------------------------


    //定义商品下架更新所使用的 队列和交换机
    @Bean(GOODS_DEL_EXCHANGE)   //交换机
    public Exchange GOODS_DEL_EXCHANGE(){
        /**
         *  fanoutExchange : 设置交换机为订阅(广播)类型 参数为 : 交换机名称
         *  durable : 设置该交换机的数据是否持久化 , 参数为 : boolean类型,true为是 , false为不是;
         *  build  : 创建
         */
        return ExchangeBuilder.fanoutExchange(GOODS_DEL_EXCHANGE).durable(true).build();
    }
    @Bean(SEARCH_DEL_QUEUE) //队列
    public Queue SEARCH_DEL_QUEUE(){
        return new Queue(SEARCH_DEL_QUEUE); //创建队列并设置名字;
    }

    @Bean //设置交换机与队列的关联
    public Binding GOODS_DEL_EXCHANGE_BINDING(@Qualifier(GOODS_DEL_EXCHANGE) Exchange exchange,@Qualifier(SEARCH_DEL_QUEUE) Queue queue){
        return BindingBuilder.bind(queue).to(exchange).with("").noargs(); //将上架用的交换机与队列关联
    }

    //-------------------------------------------------------------------------
}
